import { AsyncStorage } from 'react-native'
import { LogUtils } from 'rn-xiaobu-utils'

const USER_BEAN_KEY = 'XIAOBUUSERBEAN'
const SESSION_KEY = 'XIAOBUSESSION'
const USER_TEL_NO_KEY = 'fdaheoibhdio3bcoabfcil'

const defaultUserInfo = {
  IS_LOGIN: 0, // 记录用户是否登录,1已经登陆
  SESSION_ID: '',
  PHONE: '', // 用户手机号码
  ISSET_PASSWD: 0, // 是否设置密码.用户区分修改密码和设置密码,1为设置密码
  NICK_NAME: '', // 用户昵称
  SEX: 1, // 用户性别,1 男,2 女
  USER_ID: '', // 用户唯一id
  ADDR: '', // 用户的地址
  ICON: '', // 用户头像
  BIRTHDAY: '', // 用户生日
  INIT: '', // 0 不需要初始化,1 需要初始化,该字段用于微信版登录是否需要初始化
  AUTH_LOGIN: '-1', // AUTH_LOGIN,是否第三方登陆.-1未知,0手机号,1第三方
  VIP_LEVEL: 0, // 会员等级，0.注册会员，1.购买后的会员
  REFERAL_CODE: ''// 邀请有礼邀请码
}

async function setUserInfo (jsonInfo) {
  // 采用assign方式拷贝，避免对源数据进行操作
  let info = Object.assign({}, defaultUserInfo)
  if (jsonInfo) {
    info = Object.assign(info, jsonInfo)
  }
  try {
    await AsyncStorage.setItem(USER_BEAN_KEY, JSON.stringify(info))
    await AsyncStorage.setItem(SESSION_KEY, info.SESSION_ID)
    if (info.PHONE) {
      await AsyncStorage.setItem(USER_TEL_NO_KEY, info.PHONE)
    }
  } catch (error) {
    // Error saving data
    LogUtils.error('用户信息存储失败：' + error)
  }
}

async function getUserInfo () {
  try {
    let value = await AsyncStorage.getItem(USER_BEAN_KEY)
    if (value) {
      LogUtils.log('获取到用户数据：' + value)
      return JSON.parse(value)
    } else {
      return Object.assign({}, defaultUserInfo)
    }
  } catch (error) {
    // Error retrieving data
    LogUtils.error('用户信息获取失败：' + error)
  }
}

async function isUserLogin () {
  try {
    let userbean = await getUserInfo()
    return userbean.IS_LOGIN === 1
  } catch (error) {
    return false
  }
}

async function getUserPhone () {
  try {
    let value = await AsyncStorage.getItem(USER_TEL_NO_KEY)
    if (value) {
      LogUtils.log(value)
      return value
    } else {
      return ''
    }
  } catch (error) {
    // Error retrieving data
    LogUtils.error('用户手机号获取失败：' + error)
  }
}

export { setUserInfo, getUserInfo, getUserPhone, isUserLogin }